package com.situ.filter;
//专门管理是否登录的过滤器

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author yangkx
 * @create 2023-08-29-14:13
 */
@WebFilter("/*")//拦截所有访问网页请求，一发请求先过网
public class LoginFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) servletRequest;
        String uri = req.getRequestURI();//当前的请求地址，把这个请求地址拿出来，String类型

        //session 会话 浏览器一发请求，该浏览器就和Tomcat建立一个session
        //一发对话就有session，但里面没有内容
        //根据标记名往外拿，拿到标记值，判断非空
        boolean isLogin = req.getSession().getAttribute("currentUser") !=null;

        //判断是不是需要忽略的内容（包括不需要登录就能访问的页面，以及css，js文件等）,如果是，就放行，不用判断是否登录
        if(isLogin || uri.equals("/login") ||uri.startsWith("/js/")||uri.startsWith("/images/")||uri.startsWith("/lib/")||uri.startsWith("/css/")){
            //登录过了才能继续
            filterChain.doFilter(servletRequest,servletResponse);//这行代码以上是请求进来时执行的，以下是往回返时执行的
        }else {
            //强制类型转换
            HttpServletResponse resp = (HttpServletResponse) servletResponse;
            //没登陆就重定向
            resp.sendRedirect("/login");
        }

    }
}
